let oldArrayPrototype = Array.prototype

export let arrayMethods = Object.create(oldArrayPrototype)
// arrayMethods._proto_=Array.prototype
// 
// 原数组发生变化的重写
let methods = [
  'push',
  'pop',
  'shift',
  'unshift',
  'reverse',
  'sort',
  'splice'
]
methods.forEach((method) => {
  // 用户调用是  如果是以上七个 是重写的  否则还是用之前的数组方法
  arrayMethods[method] = function (...args) {
    //args是参数列表
    // 调用原先之前的数组方法
    oldArrayPrototype[method].call(this, ...args)
    let inserted;
    let ob = this.__ob__
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args
        break;
      case 'splice':
        inserted = args.slice(2)
        break;
      default:
        break;
    }
    if (ob) { ob.observeArray(inserted) }
  }
})